package com.eltsistemas.controller.funcionario.relatorio;

import java.sql.Connection;
import java.util.HashMap;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;

import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.eltsistemas.adapter.Relatorio;
import com.eltsistemas.dao.GenericDao;
import com.eltsistemas.hibernate.HibernateUtil;
import com.eltsistemas.modelo.Funcao;
import com.eltsistemas.modelo.Funcionario;
import com.eltsistemas.modelo.Setor;

@Controller
@RequestMapping(value="/funcionario")
public class FuncionarioRelatorio {
	

	
	// para abrir a pagina de relatorios
	@RequestMapping(value="/relatorio")
	public String relatorio(Model model)
	{
		
		//Iniciando conexao e abrindo uma transacao
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		GenericDao<Funcionario> daoFuncionario = new GenericDao<>(session, Funcionario.class);
		GenericDao<Setor> daoSetor = new GenericDao<>(session, Setor.class);
		GenericDao<Funcao> daoFuncao = new GenericDao<>(session, Funcao.class);
		
		model.addAttribute("funcionarios", daoFuncionario.listAllByAsc());
		model.addAttribute("setores", daoSetor.listAllByAsc());
		model.addAttribute("funcoes", daoFuncao.listAllByAsc());
		
		//Finalizando conexao
		session.close();
		
		return "funcionario-relatorio";
	}
	
	
	// para gerar o relatorio
	@RequestMapping(value="/geraRelatorio")
	public void geraRelatorio(HttpServletRequest request, HttpServletResponse response,
								Funcionario funcionario )
								
	{
		byte[] bytes = null; // Cria um array de bytes
		HashMap <String, Object> map = new HashMap<String, Object>();
		
		JasperReport relatorioJasper = null;
		
		map.put("funcionario", funcionario.getNome());
		
		try
		{
			relatorioJasper = new Relatorio().getReport("/com/eltsistemas/relatorio/relatorio_funcionario.jasper");
			
			//Iniciando conexao e abrindo uma transacao
			Session session = new HibernateUtil().getSession();
			session.beginTransaction();
			
			bytes = JasperRunManager.runReportToPdf(relatorioJasper, map, (Connection) session);// Tranforma o relatorio em bytes para
			
			if(new Relatorio().geraRelatorio(bytes, response) == false)
			{
				RequestDispatcher rd = request.getRequestDispatcher("/painel/index");
				rd.forward(request, response);
			}
			
			else
			{
				new Relatorio().geraRelatorio(bytes, response);
			}
			
		}
		catch (Exception e)
		{
			System.out.println("Erro: "+e);
		}
	}

	

}
